<?php

/*
Copyright 2007,2008 Benjamin V King

BH Widgets is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

BH Widgets is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with BH Widgets; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

require_once('BH_Widget_Base.php');

class BH_Proxy_Widget extends BH_Controllable_Widget_Base {
	
	function widget($args) {
		global $wp_registered_widgets;
		
		$source = $this->get_attribute('source');
		
		$w = $wp_registered_widgets[$source];
		$callback = $w['callback'];
		$params = array(array_merge($w['params'], $args));
		
		if (!is_callable($callback))
			return;
			
		echo "$before_widget\n";
		echo $this->get_widget_start_tag($args);
		
		call_user_func_array( $callback, $params);
		
		echo $this->get_widget_end_tag($args);
		echo "$after_widget\n";
	}

	function control() {
		global $bhwd, $wp_registered_widgets;
		
		if ( $this->get_request_param_value('submit') ) {
			$this->update_attribute_from_param('source');
		}
		
		$source = $this->get_attribute('source');
		
		echo '<select name="'. $this->get_request_param_name('source') .'" >'. "\n";
		echo '<option value="">select widget to clone</option>'."\n";
			
		foreach($wp_registered_widgets as $id => $value) {
		
				//only non BH widgets are cloneble
				if ($bhwd->is_a_widget($id))
					continue;
					
				$selected = (($id == $source) ? ' selected ' : '');
			
				echo '<option value="'. $id .'"'. $selected .'>'. $value['name'] .'</option>'. "\n";
		}
			
		echo '</select>'. "\n";

		
		echo '<input type="hidden" name="'. $this->get_request_param_name('submit') .'" value="1" />';
	}	
	
}

bh_widgets_register_class('BH_Proxy_Widget', 150,100);

?>
